home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
MCASM.RAR
/
MC_ASM.EXE
/
WROX_ASM
/
CH13
/
C13_3.ASM
< prev
next >
Wrap
Assembly Source File
|
1994-11-12
|
3KB
|
75 lines
;
; Program 13.3 Executing a Child Process via Function 4B00h
;
.286
dosseg
.model small
.stack 100h
.data
comm_tail db 3,' /d', 0Dh ; Command tail
prog_name db 'memview.exe',0
;
; EXEC parameter block
align 2
Env dw 0 ; parent's environment
comlin dw offset comm_tail,0
FCB1 dw 5ch,0 ; 5Ch is FCB1 offset in PSP
FCB2 dw 6ch,0 ; 6Ch is FCB2 offset in PSP
ok_mess db 'Alright!',10,13,'$'
ret_val db 0
method db 0
.code
Start:
mov ax,@data
mov ds,ax ; Load data segment
mov bx,ss
sub bx,ax
shl bx,4
cli
mov ss,ax ; Load stack pointer
add sp,bx
sti
mov bx,sp
add bx,15 ; Round up to next paragraph
shr bx,4
add ax,bx ; AX = SS + SP / 16 = segment address
; of the end of the program space
mov bx,es
sub ax,bx ; AX = required ammount of paragraphs
mov bx,ax
mov ah,4ah
int 21h ; Resize program
jc Exit ; Exit on error
mov comlin+2,ds ; Load segment of command tail
mov FCB1+2,es ; Copy FCBs from parent's PSP
mov FCB2+2,es
mov ax,es:[2ch] ; Load environment segment
mov Env,ax ; from parent's PSP
mov ax,4b00h
mov dx,offset prog_name ; DS:DX points to child pathname
mov cx,ds
mov es,cx
mov bx,offset Env ; ES:BX points to EXEC parameter
; block
int 21h ; Run child
jc Exit ; Exit on error
mov ah,4dh
int 21h ; Get child-program return value
mov ret_val,al ; AL = return value
mov method,ah ; AH = termination method
mov ah,9
mov dx,offset ok_mess
int 21h
xor al,al ; Successful
Exit:
mov ah,4ch
int 21h
end Start